#include <iostream>

using namespace std;

class Queue
{
protected:
    /* data */
    //数组 items， 数组大小n
    int n;
    int items[10];
    // head表示队头下标，tail表示队尾下标
    int head = 0;
    int tail = 0;
public:
    Queue(/* args */);
    ~Queue();

    // 入队
    bool enqueue(int item)
    {
        // 如果tail == n表示队列已经满了
        if (tail == n)
        {
            return false;
        }
        items[tail] = item;
        ++tail;
        return true;
    }
    // 出队
    int dequeue()
    {
        // 如果head -- tail 表示队列为空
        if (head == tail)
        {
            return -7;
        }
        int ret = items[head];
        ++head;
        return ret;
    }

};

class CircularQueue : public Queue
{
public:
    CircularQueue(){}
    ~CircularQueue(){}

    //入队
    bool enqueue_crc(int item)
    {
        //队列满了
        if((tail + 1) % n == head)
        {
            return false;
        }
        items[tail] = item;
        tail = (tail + 1) % n;// 取余
        return true; 
    }

    // 出队
    int dequeue_crc()
    {
        // 队列为空
        if(head == tail)
        {
            return -7;
        }
        int ret = items[head];
        head = (head + 1) % n;
        return ret;
    }
};

void testQueue();
